C++26 adds senders and receivers alongside the coroutines introduced in C++20. Why wasn't that enough? Why do we need another asynchronous programming abstraction?
This talk starts with asynchronous I/O in the operating system rather than the C++ standard library. By the time we reach senders and receivers, they should no longer seem like an arbitrary design, but the natural result of the problems modern asynchronous software has to solve.
Pavel Šimerda
Pavel Šimerda is a systems software engineer and mentor who helps engineering teams modernize and evolve C++ codebases. His work spans Linux, networking, performance analysis, debugging, software design, and industrial systems, with a focus on reducing risk and building software that remains reliable and maintainable over time.
Pavel created two Rust programming courses at the Faculty of Mathematics and Physics of Charles University in Prague. He is a member of ISO/IEC JTC 1/SC 22/WG 21, the C++ standards committee, and takes an interest in SG20, its education study group. He has spoken at open-source and systems conferences since 2011, as well as at C++ meetups. He also co-organized a joint Rust and C++ meetup with the C++ Prague community at the faculty.
C++26 is here, bringing one of the most feature-rich standards in the history of the language. This talk will uncover everything you need to know about the new standard from within—spanning core language improvements, powerful compile-time capabilities, safer programming models, and major library additions.
From compile-time reflection and design-by-contract to saturating arithmetic, SIMD, linear algebra, async execution, and new debugging tools, this talk explores the features shaping the next generation of C++. During our journey, we’ll examine not just what these features are, but why they were added, how they fit into the evolving design of modern C++, and the real-world problems they solve.
Whether you write performance-critical code, maintain large systems, or simply want to stay at the forefront of the language, you'll leave with a picture of the changes in C++26 and how to apply them effectively in your own projects!
Inbal Levi
Inbal Levi is a Lead Software Engineer with an interest in code readability, compilers, language and software design. She is an active member of the ISO C++ Standards Committee as Library Evolution Work Group Chair, and as the ISO C++ Israeli NB Chair.
Inbal is also a director at ISO C++ Foundation and the Boost Foundation and puts effort into evolving both the local and international C++ communities, as an organizer of the CoreC++ conference and meetup group, and as the program chair of C++Now.
C++26 static reflection gives us something C++ developers have wanted for years: the ability to ask the compiler what it already knows.
In this talk, we’ll explore the power of static reflection through practical examples. We’ll take familiar C++ problems filled with boilerplate and compare how they look before and after reflection.
We’ll cover what is already available in C++26, how reflection can simplify code, reduce duplication, and open the door to new patterns such as enum utilities, serialization, configuration parsing, and combining reflection with #embed for compile-time data-driven code.
This talk is not just about writing less code. It is about writing clearer, safer, and more powerful C++.
Alex Dathskovsky
Alex Dathskovsky has over 20 years of software development experience, working on systems, low-level generic tools and high-level applications. Alex has worked as an integration/software developer at Elbit, senior software developer at Rafael, technical leader at Axxana, Software manager at Abbott Israel and now a group manager a technical manager at Speedata.io an Exciting startup the will change Big Data and analytics as we know it .On His current Job Alex is developing a new CPU/APU system working with C++20, Massive metaprogramming and development of LLVM to create the next Big thing for Big Data. Alex is a C++ expert with a strong experience in template meta-programming. Alex also teaches a course about the new features of modern C++, trying to motivate companies to move to the latest standards and now working at ScyllaDB where we use the latests C++ to create the best and fastest DB in the world
For over a decade, the C++ memory model has served as the foundational contract between the language, the compiler, and modern processors. Introduced in C++11 to bring order to multithreaded execution, this abstract mathematical model has had to constantly adapt to the brutal realities of hardware physics.
This talk explores the engineering evolution of the C++ memory model through the lens of hardware constraints. We will dissect how CPU optimization mechanisms: such as store buffers, invalidation queues, and cache coherency protocols like MESI, drove the original design of memory barriers, and why abstract ideals like memory_order_consume ultimately collapsed when confronted with compiler optimization realities.
We will trace this ongoing tug-of-war across three major evolutionary milestones:
The Abstract Illusion (C++11/14): Balancing physical memory barriers against the data-dependency tracking architecture that failed in practice.
Embracing Microarchitecture (C++20/23): Moving from pure abstraction to exposing physical silicon constraints, solving false sharing with cache-line topology awareness, and replacing CPU-burning spin-locks with hardware-backed primitives like atomic::wait.
The Heterogeneous Frontier (C++26): Extending the memory model beyond CPU cores into heterogeneous execution (CPU + GPU). We will examine how std::execution (Senders/Receivers) expands formal "happens-before" relationships across hardware boundaries and weakly-ordered architectures.
Miri Ben-Nissan
Ph.D. in computer science from Bar-Ilan University. 15+ years as software engineer, mostly in C++. I give trainings in C++ to companies.
Generative AI is shifting the C++ developer’s primary role from author to reviewer and architect. In this talk, we want to address the question: which C++ language features and best practices become more important, and which lose importance, when AI becomes the main coder.
We examine whether there are features that primarily aided the human coder and are now less critical, whether certain knowledge that was once important has become less crucial, and which features and practices have become essential for C++ developers working with AI.
Attendees will leave with:
Amir Kirsh
Amir Kirsh is a C++ lecturer at the Academic College of Tel-Aviv-Yaffo and Tel-Aviv University, previously the Chief Programmer at Comverse, after being CTO and VP R&D at a startup acquired by Comverse. Amir is also co-organizer of the annual Core C++ conference and the Core C++ meetup group.
There are many reflection examples. This one focuses on the compile time generation of data to be used by a secondary process - the reader has all the information. The reflection enables to generate the in process parsing and or formatting functions. but how do we access the binary raw data from another file? how do we hold a "dictionary" of all messages types?
Erez Strauss
I am a long time C++/C developer, working on the low latency trading platforms. I published multiple projects on github. For example: https://github.com/erez-strauss/lockfree_mpmc_queue I'm interested in C++26 and its features. Working many years in linux environment. Working recently on AI in C++ projects.
What if C++ could verify the impossible, at compile time? This talk explores how to supercharge the compiler’s reasoning with constraints that go beyond the type system, turning assumptions, guidelines, documentation and best practices into compile time guarantees.
Adi Shavit
Organizer of the Core C++ User Group and Conference.
Continuation-passing style is a single change: nothing is returned, and the callee calls the rest of your computation with whatever actually happened. Everything else follows from it, the caller decides ownership, allocation, and thread affinity, and errors land where they occur instead of being carried home by hand. How it's built in C++, what it makes possible, and where it falls apart.
Noam Arye Nassi
A C++ developer with over a decade of experience, specializing primarily in Windows user and kernel development. Passionate about low-level optimization and pushing C++ compilers to generate the leanest possible machine code.
Optimization is often considered a second pass in software development, where initially it is tempting to write your business logic out and later think about optimizing it. It has its pros and cons, but the aim of this talk is to provide you with the knowledge that will let you write optimized and fast C++ code as you go, rather than in a second pass. At worst, your optimization passes would become shorter. At best, you would be able to write out fast code in the first go, improving your ability to write efficient systems.
The talk will cover various fundamental principles and concepts useful to form a mental model of how long any given computation or operation may take, and what factors you can think of to make trade-offs while writing code. We will cover this through code examples, microbenchmarks, and looking at assembly code in godbolt. We will also discuss some principles to guide your thought process as you design your systems in an efficiency-first manner, with code examples.
After this talk, attendees would be able to intuitively guess what is a reasonable amount of time for a certain operation from a theoretical perspective. Is 10ms a reasonable time for my web server to respond with a HELLO message? Is 100us enough to compute a machine learning model’s output?
Saksham Sharma
Saksham Sharma works as Director of Quantitative Research Technology at Tower Research Capital LLC, a high frequency trading firm based out of New York. He develops low latency and high throughput trading systems and strategies used for the firm's global quantitative trading. In addition, he also helps design and improve big data research infrastructure used for trading research using a combination of C++ and Python. Thanks to an urge to optimize his daily workflow, he also owns the build systems, tooling, and package managers for C++ within his team.In the past, he has worked in the fields of program analysis research, functional programming, and systems security. He is a reformed geek (exemplified by a switch to Cursor after almost a decade with Emacs), and now enjoys driving, guitar, badminton, and snowboarding.
One of C++20's headline features was modules, dragging C++ kicking and screaming into the modern world of #include-free source code.
Six years later, in 2026, I decided to check if the tooling was sufficiently mature, and tried to convert a large and complex software project, ScyllaDB, into C++20 modules without going completely insane.
This talk will examine whether I have succeeded.
Avi Kivity
Author of Kernel-based Virtual Machine, Seastar, ScyllaDB
Concepts have been in the language since C++20, and the usual pitch is readability, replacing "enable_if"s, and simplifying cryptic template errors. Both are true, and our serialization layer was a great candidate: heroic SFINAE, with template resolution that was hard to get right.
But that's not the interesting part. Working on Ceph (1M+ LoC, open source, distributed, software-defined storage system) we found three things we hadn't expected concepts to give us: decode paths that got measurably faster, whole categories of boilerplate that simply disappeared, and a latent runtime infinite loop that the compiler caught for us before it ever ran.
We'll show the real (though simplified) upstream code behind each one, the benchmark numbers across different compilers, and what adopting concepts actually looks like in an existing, large codebase.
Yuval Lifshitz
Yuval Lifshitz is a Senior Technical Staff Member at IBM, where he focuses on enhancing the Ceph distributed storage ecosystem. He develops key infrastructure components, including server access logging, bucket notifications, and Lua bindings. Yuval also introduced vector database interface for better support for AI payloads.
He has presented at major industry conferences including KubeCon, Cephalocon, Open Source Summit, and FOSDEM, as well as local events.
Code coverage tells you which lines your tests touch - mutation testing tells you whether your tests actually care. By systematically injecting small faults (mutants) into your project code and checking whether your test suite catches them, mutation testing reveals the blind spots that line coverage hides: assertions that never fail, edge cases that slip through, and logic branches that nobody truly verified. In this talk, we will show how AI helps to generate semantically meaningful mutants that mimic real developer mistakes, intelligently prioritize which mutations matter most, and even suggest the missing tests that would catch them. You'll walk away with a practical framework for integrating AI-driven mutation testing into your CI pipeline and a new standard for what "well-tested" actually means, demostrated on C++ examples.
Alex Romanov
Developer since 2003. Working on project in AI and other areas.
Most modern languages give names to the common ways of sharing behavior across types — interfaces, traits, mixins. Developers coming to C++ often assume these concepts are missing. They aren't — C++ has all three, it simply expresses them as patterns instead of language keywords.
This talk explores interfaces, traits, and mixins from the perspective of the problems they solve rather than the syntax used to implement them. We'll examine when each abstraction is appropriate, and — critically — where the lines between them blur: a concept constraining what a mixin provides, or an interface-like contract gaining default behavior it was never meant to have. We'll then look at how modern C++ maps all of this onto familiar language features: abstract base classes, concepts, CRTP, and policy-based design.
Using practical examples — plugin architectures, reusable capabilities like comparison and serialization, and cross-cutting functionality like logging — we'll build each pattern from first principles and discuss the trade-offs involved in choosing one approach over another.
By the end of the talk, you'll have a practical mental model for recognizing and designing interfaces, traits, and mixins in idiomatic modern C++. You'll understand why these concepts are often confused — and know when each is the right tool for the job.
Amit Perelman
C++ developer since late 90s. Mostly low-level programming. Currently focus on AI Inference and exploring other programming languages such as Rust and Python. Other focus area is storage systems at multi-threaded, low latency environments on Linux.
It's 2026, and the debate over whether C++ is a capable tool for building an operating system with should, by right, have been long settled. C++ provides a great balance between the type of low level and off-the rails work that an OS often requires with the resource tracking and automating of the menial parts that makes programming more enjoyable.
In this talk we'll discuss topics relevant for building an embedded OS, such as boot sequence, memory initialization and management and preemptive scheduling. We'll also discuss how C++ can be utilized to make these tasks easier, and in some cases also harder.
We'll also talk about the things in C++ you prefer to give up. While it is possible to have the entire scope of the language, it's not always worth the effort to re-introduce certain language components.
And most of all, we'll talk about how to do so without falling (too hard). We'll see defensive techniques that lets you know when you're stepping into an area that isn't available to you, and also how to decide whether to make it available (by re-implementing it) or just do without.
Shachar Shemesh
Shachar has started programming 42 years ago, and still enjoys it. Shachar started programming in C++ before exceptions were invented, and saw the language develop in many ways since, some of them quite good.
Shachar is a long time Open Source activist, and has even dabbled in writing his own programming language. He is also an aspiring YouTuber, trying to rebuild retro computers on cheap FPGAs.
Modern C++ features like constexpr, RAII, custom memory resources, and coroutines enable developers to write expressive, high-performance code. However, the compiler-generated code for these abstractions often produces complex binary structures that obscure program intent, disrupt control-flow graphs, and evade traditional security analysis tools.
This talk explores the concept of "obfuscation by modernization" how modern C++ language constructs manifest at the assembly and binary level to create stealthy execution patterns without using traditional packers or obfuscation tools. We will examine how constexpr metaprogramming strips data artifacts, how coroutine state machines dismantle linear control flow, and present a practical case study demonstrating how a custom modern C++ architecture evades modern heuristic and endpoint detection (such as Microsoft Defender). Attendees will gain a deep, under-the-hood understanding of what modern C++ compilers actually produce when language features are pushed to their limits, and how reverse-engineering tools (including AI decompilers) interpret these abstractions.
Target Audience & Prerequisites
Audience: C++ developers, systems software engineers, and security/reverse engineering analysts interested in compiler output, binary analysis, and low-level code generation.
Prerequisites: Intermediate C++ knowledge (comfort with modern C++ constructs like templates, smart pointers, and basic assembly/system API concepts). No prior malware analysis experience required.
Niro Singh
I am a C++ software engineer with over five years of experience building high-performance and low-latency systems across embedded, networking, and security-focused domains. My work spans modern C++, multithreading, memory management, distributed systems, real-time networking, and performance optimization on Linux and Windows. I have held roles ranging from embedded software engineer to senior developer, Scrum Master, and engineering lead.
I am also a Certified Ethical Hacker with a strong interest in cybersecurity, reverse engineering, malware internals, and binary analysis. Recently, I lead an AI engineering squad developing complex distributed-programming challenges for large-scale language-model training. My interests lie at the intersection of systems programming, security, and performance engineering, with a focus on turning offensive techniques into practical lessons for building more resilient software.
This talk will examine the internal C++ mechanisms around the topics of:
Chris Ryan
Classically trained in hardware and software engineering.
Well experienced in Modern C++ and Classic ‘C’ with extremely large problem spaces and Firmware on Embedded devices.
Believes strongly in reducing complexity and teaching the fundamentals of the core language mechanisms.
ISO-Cpp/WG21 standards committee member, mostly in the (Language) Evolution Working Group (EWG).
If you can’t explain your solution simply, you simply don't understand the problem.
Even strong test suites miss memory corruption, data races, undefined behavior, and other bugs that only appear at runtime. This talk shows how to use Valgrind and compiler sanitizers such as ASan, TSan, and UBSan to expose those failures early, understand the reports they produce, and turn them into actionable fixes. We will compare the strengths, blind spots, and performance costs of each tool, and show how to combine them in a practical workflow for development, CI, and regression testing. The talk draws on practical, real-world experience, in complex systems, multithreaded code, debugging real issues.The examples will focus on real C++ code and on the kinds of failures that matter in large systems, embedded software, and multithreaded applications. By the end, attendees will know when to reach for each tool, how to read the results, and how to make dynamic analysis part of everyday engineering rather than a last resort.
Alex Kushnir
Alex Kushnir, principal software engineer with Johnson & Johnson MedTech. Experienced in embedded software development, with focus on software infrastructures, tools and methodologies.
B.Sc. in Electronics and Computer engineering
std::atomic and std::memory_order are utterly opaque abstractions. It feels like they were put in place to hide some monstrosity that is too complex for mortals to comprehend, and inevitably when trying to understand the underlying reality, the explanations end with 'the processor does weird things' and 'think about it as if...'.
Well, 'think about it as if' no more. In this talk we'll present the gory and wonderful mechanics of cache coherence protocols, store buffers, cache invalidation queues and the in-processor load-store-queue. We'll explain how modern hardware design makes different cores have different views of memory, and what fences and read-modify-write instructions do exactly - for both x86/64 and ARM/RISC-V (which can be dramatically different).
This is an advanced low-level talk located at the borderline of software development and electrical engineering, discussing topics rarely - if ever - discussed at C++ conference talks.
Ofek Shilon
Compiler-Explorer maintainer, Dev @Speedata
We often see C++ running atop an operating system and a heavy standard library. But how can we run it on a processor with nothing underneath it?
This talk walks through the entire pipeline to get modern C++ running on a bare-metal 64-bit ARM (aarch64) target inside QEMU.
We start by bootstrapping a clean aarch64-none-elf GCC and Binutils cross-toolchain (from source) with libgcc, but no C library. We'll see which configure options matter, why the -none-elf target is the simpler one to build, and what libgcc quietly provides that your code won't link without. We make the distinction between the compiler's runtime (libgcc) and a C library (i.e. glibc or newlib).
We'll wrap up by showing the payoff, which is a small printk ring buffer, a stack-allocated string, and containers that live without a heap, all written in C++.
Relevance
Reaching for an OS is a reflex, but plenty of real systems don't necessarily need one. When a device does a single, well-defined job, a full Linux or even an RTOS like FreeRTOS can be more than the task requires. That question was discussed in Core C++ 2024 "Optimizing Embedded Software Infrastructure" by Alex Kushnir and Akram Zoabi (YouTube). Our talk provides a practical continuation for the path of bare-metal.
Intended Audience
Anyone who might ship C++ onto bare hardware: embedded and firmware developers, people building safety-critical systems, or just C++ programmers who want to see the machine one layer down.
No prior kernel experience is assumed. The ability to read solid C++ is enough.
Ron Shabi
I'm a B.Sc. student in computer science who loves low-level computing and modern C++. I focus on operating systems and network stacks.
My open source works include Vortex, a from-scratch OS for Armv8-A processors.
Timing bugs are easy to write, hard to test, and often nearly impossible to reproduce on demand. They can affect any software, but C++ is frequently used in systems where time is measured at very high resolution, hardware and platform details matter, and—in real-time systems—even a small delay can become a failure.
From subtle arithmetic and conversion errors to undefined behavior and clocks that wrap, stall, drift, or disagree, seemingly reasonable timing code can behave in surprising ways. This talk explores these hidden traps and the practical techniques that help keep clocks, timers, and deadlines under control.
Mike Lindner
A Software Engineering Manager and Architect with over three decades of C++ experience, I enjoy leading engineering groups that build complex systems where architecture, performance, and long-term maintainability really matter. I’m particularly drawn to the intersection of technical leadership and hands-on engineering — turning difficult problems into software that is built to last. I share some of what I’ve learned along the way on my blog, “Architect in Slippers” (https://sw-arch.blog).
Ever wondered how a modern C++ compiler looks from the inside?
This session will help you to get familiar with llvm clang in a simple, intuitive way.
We will start from going through clang structure and then implement a small feature: a new static that is shared between function template instantiations.
At the end, you will see that while compiler engineering is complex, starting with it can be beginner friendly!
Tal Yacobi
Software and firmware engineer with experience in embedded platforms, low latency networking and AI accelerators. ISO C++ committee member.
Coding agents need fast, disposable, fully isolated compute, and open infrastructure already has most of the pieces. This talk builds an agent execution layer on open primitives: KVM, snapshot and restore, virtual networking, and storage built for fast clone and teardown. We cover image lifecycle, scheduling many short-lived agent workers, and observability across a fleet of disposable microVMs. Every piece is open and portable, no proprietary platform required.
Yossi Eliaz
Yossi Eliaz is a Principal Engineer working on build acceleration and developer infrastructure at Incredibuild. His background spans systems and applied ML: software/firmware roles at Twistlock, Broadcom, Marvell, and BAE Systems (container security, embedded systems, cryptography, DSP); computational genomics research at Baylor College of Medicine and Rice University (Hi-C analysis, large-scale scientific pipelines); genome-assembly and CRISPR-focused ML at NRGene; deep learning for autonomous driving at Mobileye; and ML/AI product leadership at Matia.io. He now focuses on the caching, compile-farm, and snapshot infrastructure that determines whether large C/C++/C# codebases -- and the agentic tools being built on top of them -- actually scale.
The talk describes the C++ language feature, the path to standardize it and its experimental implementation in clang.
The feature in a nutshell:
int ar[2] = {42, 43};
int y;
auto [x, using y] = ar; // x is new, y is assigned Ran Regev
C++ Software Developer in the last 25+ years. Active in the ISO C++ Committee.
Performance problems are easy to spot and hard to diagnose — especially when your C++ service runs on elastic cloud infrastructure. This talk presents a three-layer measurement framework (Catch2 → k6 → Datadog) that leaves little room for guesswork, with practical lessons from real AWS workflow tuning and the surprises that only numbers can reveal.
Alex Cohn
A software craftsman, learning the power and the beauty of C++ since 1991 and up to day.
As Senior C++ Developer at Priority Software, Alex was responsible for making legacy Windows C++ core components deliver low-latency top performance in the cloud environment.
Today's world runs on C++. That's because, in domains requiring scale, performance, low latency, and fine-grained control over concurrency, C++ is second to none! Yet in recent years, a growing concern has emerged: C++ programs are often considered unsafe — not because of programmer negligence, but because the language itself provides insufficient mechanisms to prevent or reliably detect undefined behavior (UB). For those financially and technically invested in C++, its current lack of language safety raises a fundamental question: How can we evolve ISO C++ to be UB-safe without necessarily sacrificing runtime performance, and without breaking backward compatibility with existing, valid C++ code?
In this talk, we begin by motivating an overall approach to UB-safety that starts from a simple but uncompromising premise: each individual potential source of UB must be able to be detected via runtime checking. Crucially, this approach eliminates the notion of "safe" and "unsafe" regions of a program — there is no place where UB can hide, and no need to switch languages, subsets, or tools to achieve comprehensive coverage.
We then examine how the C++26 contracts facility provides the essential foundation for transforming optional runtime checks into the practical, scalable mechanism for eliminating UB bugs in production software. Contracts give developers fine-grained control over where and when checking occurs, allowing runtime overhead to be spent where it is affordable or most valuable — such as in new, rarely executed, or security-critical code. These decisions naturally evolve over time, as frequent, long-running checks that never fire may no longer justify their cost.
Finally, we outline the concrete steps of an incremental journey toward reducing undefined behavior in ISO C++. The result is a model of UB-safety — rooted in C++26 contracts and optional runtime checking — that is competitive with, and in key respects stronger than, approaches taken by other high-performance languages. Most importantly, this model applies not only to new code, but to the vast body of existing C++ software already in the wild.
John Lakos
John Lakos, author of Large-Scale C++ Software Design (Pearson, 1997), serves at Bloomberg LP in New York City as a senior architect and mentor for C++ Software Development worldwide. He is also an active voting member of the C++ Standards Committee’s Evolution Working Group. Previously, Dr. Lakos directed the design and development of infrastructure libraries for proprietary analytical financial applications at Bear Stearns. For 12 years prior, Dr. Lakos developed large frameworks and advanced ICCAD applications at Mentor Graphics, for which he holds multiple software patents. His academic credentials include a Ph.D. in Computer Science ('97) and an Sc.D. in Electrical Engineering ('89) from Columbia University. Dr. Lakos received his undergraduate degrees from MIT in Mathematics ('82) and Computer Science ('81). He is the author of the multi-volume book Large-Scale C++, the first volume of which, Volume I: Process and Architecture (Pearson, 2020), is currently available, and subsequent volumes are forthcoming. He is the coauthor of Embracing Modern C++ Safely (Pearson, 2021) along with Vittorio Romeo, Rostislav Khlebnikov, and Alisdair Meredith.
Everyone knows that C++ is Turing complete. That turns out to be almost the least interesting answer. How many different languages are hiding inside C++, and how many of them can compute anything on their own?
In this fast, playful tour, we make ordinary runtime C++, templates, constant evaluation, class template argument deduction, reflection, contracts, and the preprocessor each do universal computation—or say precisely where the machine boundary lies. Rule 110 turns the preprocessor into a delightfully unlikely computer. A new CTAD construction finds recursion where no sensible person would look for it. C++26 adds two more surprises.
No computability theory background is required. We will build one small proof toolkit, then use it repeatedly as the reveals get stranger. The full proofs are there for anyone who wants to descend into them; the main path stays visual, quick, and fun. By the end, the question will not be whether C++ is Turing complete, but how it keeps happening.
Michael Daum
Michael Daum is the principal developer at Coobeeyon Development Limited, a custom software development and C++ consulting firm. He has been using C++ since 1992, and has coded professionally in C++ since 1998, primarily as an application developer in 3D digital content creation. Mike believes that C++ should be fun, and open to everyone. He founded the CppNorth conference in 2022 in order to further these causes and to showcase his hometown of Toronto as a centre of C++ excellence.
Abstraction is one of the most powerful tools in software engineering, design, and development. C++ provides a rich set of mechanisms for building effective abstractions, starting from classes for encapsulation – hiding data and exposing only the required behavior, interfaces for separating contract from implementation, templates for generic programming, C++20 concepts for expressing type expectations, function objects and lambdas for flexible callables, and patterns such as RAII for encapsulating behavior over a given control flow.
We rely on abstractions to write generic and reusable code, yet we often struggle to recognize when they clarify intent and when they quietly make systems more fragile.
In this Back to Basics talk, we return to the fundamental principles of C++ abstractions. We explore how good abstractions enable us to write code in "future tense": implementing components before all requirements are known, composing systems incrementally, and deferring decisions without sacrificing correctness. We also examine how well-designed abstractions improve testability.
Through concrete examples, we contrast good and bad abstractions, highlighting common pitfalls such as over-generalization, leaky interfaces, and premature constraints, and show how to design abstractions that remain robust and useful over time. Finally, we discuss how good abstractions contribute to more effective AI-generated code.
Whether you are a novice C++ developer or a more experienced one, this talk will help you sharpen your intuition for abstractions that stand the test of time.
Nathanel Green
My name is Nathanel and I am the CEO and Co-founder of Alphapulse, a medical device startup company. Previously, I worked as a software engineer and team leader in various companies, and I was the Co-founder and former CTO of Darebiz AI (Acquired). With over ten years of experience in a wide range of programming languages and technologies, I have also taught theoretical and practical software topics at different companies in the industry.
I hold degrees in computer science and electrical engineering from Tel Aviv University. I live in Ramat Gan, married and have two wonderful girls.
Achieving optimal performance on multi-core systems frequently relies on careful management of critical sections, and on using lock-free mechanisms wherever possible. On 2026 the C++ standard library gained 2 mechanisms for safe reclamation, that enable robust and high performant lock-free systems:
In this talk we will learn about the need for safe reclamation, understand why the are important, and dive into the two new mechanisms, along with other alternatives - and understand the best scenarios to use each of them. If you care about performance of complex multi threaded systems and want to understand why reclamation is important, please join me.
Roi Barkan
Professional software developer and architect since 2000, Roi's main focus throughout his career was on high performance and distributed systems, implementing complex and innovative algorithms. Roi is the SVP technologies of Istra Research, where he helps creating low latency financial systems. Prior to working for Istra Research, Roi spent 12 years in software development, architecture and management in the IT Security field. Roi received his B.A in Computer Science with high honors from the Technion in Israel, and his executive MBA from Tel Aviv University.
Software systems engineering is a hierarchy. There are layers of abstractions, ideally non-leaky layers. There is a gap between how a software system appears from the perspective of a high level language, and from the perspective of what the underlying platform would expect for a target of performance. An overview of contemporary hardware platforms and how software engineering and design practices and methodologies could help in building performing systems, with a particular focus on low level optimizations while maintaining higher level focus and abstractions.
There is a trend of moving software engineering focus upward to constructs that have a tendency of hiding the specific of the underlying platform – and there certainly are very good reasons for such a paradigm change. Performance matters. Premature optimization is evil. Is there anything in between those two extremes? How feasible is it to rely on the abstraction of the platform as hidden by the compiler and the corresponding libraries, expecting that it will do the right thing? How much of hints and specifics would one need to expose for the compiler to be able to do the right thing? What is the right balance between expressing application logic via higher level construct yet still being able to gain the performance benefits as if relying on the low level specifics?
Then there are language abstractions. Abstractions are good. They tend to hide the details that otherwise might be hard to get right, they provide for a feeling of certain constructs being simpler, and they appear to just work. Moreover, they appear to just work with no additional cost, at least on paper. Is it really the case? Let’s take a look and see. This is a look inside workings of several areas of machinery that is commodity in practical software engineering – error handling, working with data collections, and simplification of control flow. An analysis of how higher level abstractions map to lower level language constructs and at what cost, and an equivalent functionality match to “simpler” options from the perspective of performance and engineering cost, and the impact to data structures and overall application design – those would be the main areas of coverage of this part of the talk.
Overall the talk has separate intertwined sections, each one focusing on logically separate set of topics, giving priority to techniques and specifics relevant to single thread performance. There is little specifics of any particular higher level language as all contemporary ones support an equivalent set of functionality, instead the content is structured to look into the output of a compiler and why particular output may impact the resulting performance, and what could be done for changing it. Given the conference on C++, most of the content and examples are specific to C++, although the content is equally applicable to C, Rust, Zig, Go, and the main message is on the technologies and mechanics, and not on just the language.
It might be that the layers of abstraction need to be quite leaky.
Ignas Bagdonas
Network engineer with substantial clue in software and hardware engineering. Dealing with low latency and high throughput network systems. Able to maintain discussion on topics of BGP, Verilog, and C++, had seen X.25, Cisco CGS, and X.25 on Cisco CGS in real life.